#include<bits/stdc++.h>
using namespace std;
int n,m,l,V,a[100005],d[100005],v[100005],s[100005];
bool vis[1000005];
void f(){
    memset(vis,false,sizeof(vis));
    cin >> n >> m >> l >> V;
    for(int i=1;i<=n;i++){
        cin >> d[i] >> v[i] >> a[i];
    }
    for(int i=1;i<=m;i++){
        cin >> s[i];
        vis[s[i]]=true;
    }
    for(int i=l;i>=1;i--){
        vis[i]=vis[i+1]||vis[i];
    }
    int cnt=0,res=0;
    int tmp=INT_MIN;
    for(int i=1;i<=n;i++){
        if(vis[d[i]] && v[i]>V){
            cnt++;
        }
        if(v[i]>V){
            tmp=max(tmp,d[i]);
        }
    }
    for(int i=1;i<=m;i++){
        if(s[i]<=tmp){
            res++;
        }
    }
    printf("%d %d\n",cnt,res);
    return;
}

int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int t;
    cin >> t;
    while(t--)f();
    return 0;
}
